// permission.js 用来实现权限控制--->router.beforeEach
import router from '@/router'
import store from '@/store'
// 导入profress包
import NProgress from 'nprogress' // progress bar
import 'nprogress/nprogress.css' // progress bar style
import getPageTitle from '@/utils/get-page-title'

NProgress.start() // 开启进度条 ---->何时开启
NProgress.done() // 关闭进度条 ---->何时关闭

//  to:要去哪个页面
//  from:从哪里来
//  next:它是一个函数。
//     如果直接放行 next()
//     如果要跳到其它页 next(其它页)
//  设置白名单
const whiteList = ['/login', '/404']
router.beforeEach(async(to, from, next) => {
  console.log(to, from)
  // 动态设置网页标题
  document.title = getPageTitle(to.meta.title)
  NProgress.start() // 开启进度条
  const token = store.state.user.token
  if (token) {
  // 已经登陆了
    if (to.path === '/login') {
      console.log('已经登录了,不能再去登录页,跳转到首页')
      next('/') // next如果指定了地址进行跳转,那么就不会经过router.afterEach ---->需要手动关闭
      NProgress.done()
    } else {
      console.log('已经登陆不是去登录页,放行')
      // 判断vuex中有没有用户的数据,如果没有那么就发送请求,有直接跳转页面
      if (!store.state.user.userInfo.userId) {
        // 调用axios的函数 获取用户信息储存到vuex中
        await store.dispatch('user/setUserInfo')
      }

      next() // 放行到首页
    }
  } else {
    // 没有登陆
    // 是否白名单 不需要token, /login || 404
    // whiteList.includes()判断传入内容在不在数组中,返回之时boolean
    if (whiteList.includes(to.path)) {
      console.log('拥有白名单,直接放行')
      next()
    } else {
      console.log('没有登陆,没有白名单,跳转登录页')
      next('/login')
      NProgress.done()
    }
  }
})

// 页面跳转完成关闭进度条
router.afterEach(() => {
  NProgress.done()
})
